HTTP File Upload - 0Byte (oder ein Wald voller Bäume)

HTTP File Upload - 0Byte (oder ein Wald voller Bäume)

am 18.03.2006 11:12:42 von Heiko Rompel

Moin,

wenn ich Script 1 alleine laufen lasse,
klappt alles wie es soll.

Wenn ich Script 2 als Teil eines Scriptes laufen lasse,
dann werden die Dateien alle mit 0 Byte angelegt.

Also selbst wenn ich die Lade-und Schreibteile aus
Script 1 in Script 2 kopiere klappt es nicht.

Warum? Was übersehe ich?

MfG
Heiko

=========== Script 1 (Quelle : SelfHTML) =======

#!/usr/bin/perl -w
use strict;
use CGI; # Modul fuer CGI-Programme
use File::Basename;
my $cgi = new CGI; # neues Objekt erstellen
# Content-type fuer die Ausgabe
print $cgi->header(-type => 'text/html');
# die datei-daten holen
# die datei-daten holen
my $pic_name = $cgi->param("myfile");
(my $filename,my $path) = fileparse $pic_name;
$filename =~ s/([^\w.-])/_/g;
$filename =~ s/^[-.]+//;
# Dateiendungen überprüfen
# Splitten des Dateinamens in Dateiname und Endung
(my $bildname,my $endung) = split(/\./, $filename);
$endung = lc($endung);

# dateinamen erstellen und die datei auf dem server speichern
my $filename = 'upload/file_'.'_'.$ENV{REMOTE_ADDR}.'_'.time.'.'.$endung;
open DAT,'>'.$filename or die 'Error processing file: ',$!;

# Dateien in den Binaer-Modus schalten
binmode $pic_name;
binmode DAT;

my $data;
while(read $pic_name,$data,1024) {
print DAT $data;
}
close DAT;

============= Script 2 =======================

sub user_write {
use File::Basename;
my @file;
my $nam= $q->param("NAME");
my $txt= $q->param("TEXT");
my $pic_name= $q->param("PIC_NAME");
my $float= $q->param("float");

(my $filename,my $path) = fileparse $pic_name;
$filename =~ s/([^\w.-])/_/g;
$filename =~ s/^[-.]+//;
# Dateiendungen überprüfen
# Splitten des Dateinamens in Dateiname und Endung
(my $bildname,my $endung) = split(/\./, $filename);
$endung = lc($endung);
if (($endung eq "jpg") or ($endung eq "jpeg") or ($endung eq "bmp")){
# dateinamen erstellen und die datei auf dem server speichern
$filename = 'upload/file_'.'_'.$ENV{REMOTE_ADDR}.'_'.time.'.'.$endung;
open DAT,'>'.$filename or die 'Error processing file: ',$!;
# Dateien in den Binaer-Modus schalten
binmode $pic_name;
binmode DAT;
my $data;
while(read "$pic_name",$data,1024) {
print DAT $data;
}
close DAT;
}
$filename="\"\"";

Re: HTTP File Upload - 0Byte (oder ein Wald voller Bäume)

am 18.03.2006 13:24:06 von Slaven Rezic

"Heiko Rompel" writes:

> Moin,
>
> wenn ich Script 1 alleine laufen lasse,
> klappt alles wie es soll.
>
> Wenn ich Script 2 als Teil eines Scriptes laufen lasse,
> dann werden die Dateien alle mit 0 Byte angelegt.
>
> Also selbst wenn ich die Lade-und Schreibteile aus
> Script 1 in Script 2 kopiere klappt es nicht.
>
> Warum? Was übersehe ich?
>

Warum hast du $pic_name in Skript 2 in Anführungszeichen gesetzt?

--
Slaven Rezic - slaven rezic de

Lost in your Tk widget tree? Try
http://user.cs.tu-berlin.de/~eserte/src/perl/Tk-WidgetDump/

Re: HTTP File Upload - 0Byte (oder ein Wald voller B

am 18.03.2006 13:34:50 von Heiko Rompel

Hallo,

> Warum hast du $pic_name in Skript 2 in Anführungszeichen gesetzt?

Nur um zu testen, ob es vielleicht an dem Pfad (Leerzeichen, etc) liegt.
brachte aber nichts.

MfG
Heiko

Re: Re: HTTP File Upload - 0Byte (oder ein Wald voller Bäume)

am 18.03.2006 14:40:02 von Slaven Rezic

"Heiko Rompel" writes:

> Hallo,
>
> > Warum hast du $pic_name in Skript 2 in Anführungszeichen gesetzt?
>
> Nur um zu testen, ob es vielleicht an dem Pfad (Leerzeichen, etc) liegt.
> brachte aber nichts.

$pic_name wird im read als Filehandle genutzt. Das in
Anführungszeichen zu setzen könnte falsch sein.

Vielleicht solltest du statt param() upload() verwenden, wie es auch
in der CGI.pm-Dokumentation mittlerweile empfohlen wird.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

tkruler - Perl/Tk program for measuring screen distances
http://ptktools.sourceforge.net/#tkruler

Re: Re: HTTP File Upload - 0Byte (oder ein Wald voller

am 18.03.2006 17:30:58 von Heiko Rompel

Hallo,

"Slaven Rezic" schrieb:

> $pic_name wird im read als Filehandle genutzt. Das in
> Anführungszeichen zu setzen könnte falsch sein.

Habe ich auch schon wieder entfernt.

> Vielleicht solltest du statt param() upload() verwenden, wie es auch
> in der CGI.pm-Dokumentation mittlerweile empfohlen wird.

Wenn das Script läuft, kann ich das noch ändern.
Jetzt interessiert mich ermal, warum das Script 1 aus SelfHTML
läuft und wenn es Teil eines anderen Scriptes ist - nicht.

MfG
Heiko

Re: Re: Re: HTTP File Upload - 0Byte (oder ein Wald voller Bäume)

am 18.03.2006 17:57:16 von Slaven Rezic

"Heiko Rompel" writes:

> Hallo,
>
> "Slaven Rezic" schrieb:
>
> > $pic_name wird im read als Filehandle genutzt. Das in
> > Anführungszeichen zu setzen könnte falsch sein.
>
> Habe ich auch schon wieder entfernt.
>
> > Vielleicht solltest du statt param() upload() verwenden, wie es auch
> > in der CGI.pm-Dokumentation mittlerweile empfohlen wird.
>
> Wenn das Script läuft, kann ich das noch ändern.
> Jetzt interessiert mich ermal, warum das Script 1 aus SelfHTML
> läuft und wenn es Teil eines anderen Scriptes ist - nicht.

Vielleicht löst upload() dein Problem. param() in Verbindung mit
File-Uploads schien mir immer Black Magic zu sein.

--
Slaven Rezic - slaven rezic de

Visualize Makefiles with GraphViz:
http://user.cs.tu-berlin.de/~eserte/src/perl/GraphViz-Makefi le/

Re: Re: Re: HTTP File Upload - 0Byte (oder ein Wald vo

am 18.03.2006 18:53:46 von Heiko Rompel

Hallo,

"Slaven Rezic" schrieb:

> Vielleicht löst upload() dein Problem. param() in Verbindung mit
> File-Uploads schien mir immer Black Magic zu sein.

Aber wenn ich einfach das param() durch ein upload() ersetze,
dann meckert fileparse.

Ich habe das jetzt mit 2 Variablen und upload() gelöst.
Jetzt muss ich nur noch APACHE richtig konfigurieren.
Denn vorhanden sind die Files nur anzeigen geht nicht.

MfG
Heiko

Re: Re: Re: Re: HTTP File Upload - 0Byte (oder ein Wald voller Bäume)

am 19.03.2006 10:27:50 von Slaven Rezic

"Heiko Rompel" writes:

> Hallo,
>
> "Slaven Rezic" schrieb:
>
> > Vielleicht löst upload() dein Problem. param() in Verbindung mit
> > File-Uploads schien mir immer Black Magic zu sein.
>
> Aber wenn ich einfach das param() durch ein upload() ersetze,
> dann meckert fileparse.

Den Dateinamen erhälst du weiterhin mit param(). Den Filehandle mit
upload(). Weiterhin gibt es noch uploadInfo(), falls du weitere
Informationen aus dem Fileupload ziehen willst.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

Start a WWW browser - OS independent:
http://user.cs.tu-berlin.de/~eserte/src/perl/WWWBrowser/